package cn.tedu.map;

import java.util.*;

/*本类用于测试Map接口*/
public class MapDemo {
    public static void main(String[] args) {
        //1.创建map对象
        /*Mqp中的数据哟啊符合映射规则,需要同时指定K与V的数据类型
        * 至于K和V具体指定成说明类型,取决于业务的具体要求*/
        Map<Integer,String> map = new HashMap<>();
        //向map集合存入数据,注意方法是put
        map.put(9527,"白骨精");
        map.put(9528,"黑熊精");
        map.put(9529,"鲤鱼精");
        map.put(9530,"黄毛怪");
        map.put(9531,"黑熊精");
        //map.put(9527,"女儿国");
        System.out.println(map);
        /*1.map中存放着的都是无序的数据
        * 2.map中的value可以重复--比如我们可以训两个黑熊精
        * 3.map中的key不允许重复,如果重复,新value会把旧value覆盖掉
        * 比如女儿国国王和白骨精的key都是9527,白骨精被覆盖掉*/

        //进行方法测试
        //map.clear();//清空集合
        //System.out.println(map);//{}
        System.out.println(map.equals("黄毛怪"));//false,判断"黄毛怪是否与集合对象相等"
        System.out.println(map.isEmpty());//判断集合是否为空
        System.out.println(map.size());//获取map集合中键值对的个数

        //判断map集合是否包含指定的key键
        System.out.println(map.containsKey(9527));
        //判断map集合是否包含指定的value键
        System.out.println(map.containsValue("白骨精"));

        //将map集合中的所有的value值取出,放入Collection集合中
        //Collection<Type>中Type的类型,取决于map中value的类型
        Collection<String> values = map.values();
        System.out.println(values);//[女儿国, 黑熊精, 鲤鱼精, 黄毛怪, 黑熊精]

        /*map集合的迭代方式一*/
        /*我们想要遍历map中的数据,但是map集合本身没有自己的迭代器
        * 所以需要先将map集合转为Set集合以后,再使用set的迭代器进行迭代
        * 代码:Set<key> = map.keySet();
        * 作用:将map中所有的key值取出,存入set集合中,此处set的泛型是Integer*/
        Set<Integer> set = map.keySet();//将map集合转为set集合,set中存的是map的key
        Iterator<Integer> it = set.iterator();//获取set集合对应的迭代器
        while(it.hasNext()){//判断集合是否有下一个可迭代的元素
            Integer key = it.next();
            String value = map.get(key);
            System.out.println("("+key+"="+value+")");
            //System.out.println(it.next());//打印获取到的迭代的元素
        }
        //map的迭代方法二
        /*遍历map集合,需要先把map集合转换为set集合
        * 本方案是把一对键值对看成一个Entry
        * 代码:Map.Entry<Key,Value> = map.entrySet();
        * Map.Entry<K,v>,这里是Map.Entry<Integer,String>*/
        //将map集合装换成只存entry的set集合
        Set<Map.Entry<Integer, String>> set2 = map.entrySet();
        //获取set集合的迭代器,泛型就是集合的entry
        Iterator<Map.Entry<Integer, String>> it2 = set2.iterator();
        while (it2.hasNext()){//判断是否有下一个元素可迭代
            //System.out.println(it2.next());//方式一:可以直接打印
            //方式二:接一下本轮循环获取到的entry
            Map.Entry<Integer,String> entry = it2.next();
            Integer key = entry.getKey();//根据entry获取对应的key
            String value = entry.getValue();//根据entry获取对应的value
            System.out.println("*"+key+" : "+value+"*");//拼接打印
        }
    }
}
